package com.bingxue.edu.framework.excel.converter;

import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.converters.WriteConverterContext;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.GlobalConfiguration;
import com.alibaba.excel.metadata.data.ReadCellData;
import com.alibaba.excel.metadata.data.WriteCellData;
import com.alibaba.excel.metadata.property.ExcelContentProperty;
import com.bingxue.edu.common.enums.GenderEnum;
import com.bingxue.edu.common.enums.PayTypeEnum;
import io.micrometer.common.util.StringUtils;

import java.util.Objects;

/**
 * 性别转换器
 */
public class PayTypeConverter implements Converter<PayTypeEnum> {
    @Override
    public Class<?> supportJavaTypeKey() {
        return PayTypeEnum.class;
    }

    @Override
    public CellDataTypeEnum supportExcelTypeKey() {
        return CellDataTypeEnum.STRING;
    }

    /**
     * 从excel读数据时候调用
     * 单元格数据转java数据
     * @param cellData Excel 单元格的数据，<?> 表示通配符，意味着可以接受任何类型的数据
     * @param contentProperty Excel 内容的元数据，例如列标题、格式等
     * @param globalConfiguration 一般是全局配置
     * @return
     */
    @Override
    public PayTypeEnum convertToJavaData(ReadCellData<?> cellData, ExcelContentProperty contentProperty,
                                     GlobalConfiguration globalConfiguration) {
        String value = cellData.getStringValue();
        if (StringUtils.isBlank(value)){
            // 未知
            return null;
        }
        if (value.contains("线上")) {
            return PayTypeEnum.FUIOU;
        }
        if (value.contains("线下")) {
            return PayTypeEnum.OFFLINE;
        }
        return null;
    }

    /**
     * 写数据到excel里面
     * java数据转单元格数据
     * @param context 上下文对象,可以获取值
     * @return
     */
    @Override
    public WriteCellData<?> convertToExcelData(WriteConverterContext<PayTypeEnum> context) {
        PayTypeEnum value = context.getValue();
        if (Objects.equals(value, PayTypeEnum.FUIOU)) {
            return new WriteCellData<>("线上");
        }
        if (Objects.equals(value, PayTypeEnum.OFFLINE)) {
            return new WriteCellData<>("线下");
        }
        return new WriteCellData<>("未知");
    }

}
